home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / xalan.jar / org / apache / xalan / xslt / VariableStack.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-04-12  |  4.2 KB  |  169 lines

  1. package org.apache.xalan.xslt;
  2.  
  3. import java.io.FileNotFoundException;
  4. import java.io.IOException;
  5. import java.net.MalformedURLException;
  6. import java.util.Stack;
  7. import java.util.Vector;
  8. import org.apache.xalan.xpath.XObject;
  9. import org.apache.xalan.xpath.XRTreeFrag;
  10. import org.apache.xalan.xpath.xml.QName;
  11. import org.w3c.dom.DocumentFragment;
  12. import org.w3c.dom.Node;
  13. import org.xml.sax.SAXException;
  14.  
  15. class VariableStack extends Stack {
  16.    private static final Integer contextMarker = new Integer(0);
  17.    private static final Arg m_elemFrameBoundry = new Arg();
  18.    private int m_globalStackFrameIndex = -1;
  19.    private int m_currentStackFrameIndex;
  20.  
  21.    public void markGlobalStackFrame() {
  22.       this.m_globalStackFrameIndex = ((Vector)this).size();
  23.       this.push(contextMarker);
  24.    }
  25.  
  26.    void setCurrentStackFrameIndex(int var1) {
  27.       this.m_currentStackFrameIndex = var1;
  28.    }
  29.  
  30.    int getCurrentStackFrameIndex() {
  31.       return this.m_currentStackFrameIndex;
  32.    }
  33.  
  34.    VariableStack() {
  35.       this.pushContextMarker();
  36.    }
  37.  
  38.    void pushContextMarker() {
  39.       this.push(contextMarker);
  40.    }
  41.  
  42.    public Object push(Object var1) {
  43.       if (this.m_currentStackFrameIndex == ((Vector)this).size()) {
  44.          ++this.m_currentStackFrameIndex;
  45.       }
  46.  
  47.       return super.push(var1);
  48.    }
  49.  
  50.    public Object pop() {
  51.       if (this.m_currentStackFrameIndex == ((Vector)this).size()) {
  52.          --this.m_currentStackFrameIndex;
  53.       }
  54.  
  55.       return super.pop();
  56.    }
  57.  
  58.    public void setStackSize(int var1) {
  59.       boolean var2 = this.m_currentStackFrameIndex == ((Vector)this).size();
  60.       ((Vector)this).setSize(var1);
  61.       if (var2) {
  62.          this.m_currentStackFrameIndex = ((Vector)this).size();
  63.       }
  64.  
  65.    }
  66.  
  67.    void popCurrentContext() {
  68.       int var1 = ((Vector)this).size();
  69.  
  70.       for(int var2 = var1 - 1; var2 >= 0; --var2) {
  71.          if (((Vector)this).elementAt(var2) == contextMarker) {
  72.             this.setStackSize(var2);
  73.             return;
  74.          }
  75.       }
  76.  
  77.    }
  78.  
  79.    public void pushVariable(QName var1, XObject var2) {
  80.       this.push(new Arg(var1, var2, false));
  81.    }
  82.  
  83.    void pushParams(XSLTEngineImpl var1, Stylesheet var2, ElemTemplateElement var3, Node var4, Node var5, QName var6) throws SAXException, MalformedURLException, FileNotFoundException, IOException {
  84.       for(ElemTemplateElement var7 = (ElemTemplateElement)var3.getFirstChild(); var7 != null; var7 = var7.m_nextSibling) {
  85.          if (var7.getXSLToken() == 2) {
  86.             ElemWithParam var8 = (ElemWithParam)var7;
  87.             Object var9;
  88.             if (var8.m_selectPattern != null) {
  89.                var9 = var8.m_selectPattern.execute(var1.getXMLProcessorLiaison(), var5, var8);
  90.             } else {
  91.                DocumentFragment var10 = var1.createResultTreeFrag(var2, var8, var4, var5, var6);
  92.                var9 = new XRTreeFrag(var10);
  93.             }
  94.  
  95.             this.push(new Arg(var8.m_qname, (XObject)var9, true));
  96.          }
  97.       }
  98.  
  99.    }
  100.  
  101.    public XObject getParamVariable(QName var1) throws SAXException {
  102.       XObject var2 = null;
  103.       int var3 = this.getCurrentStackFrameIndex();
  104.  
  105.       for(int var4 = var3 - 1; var4 >= 0; --var4) {
  106.          Object var5 = ((Vector)this).elementAt(var4);
  107.          if (var5 == contextMarker) {
  108.             break;
  109.          }
  110.  
  111.          if (((Arg)var5).equals(var1)) {
  112.             var2 = ((Arg)var5).m_val;
  113.             break;
  114.          }
  115.       }
  116.  
  117.       return var2;
  118.    }
  119.  
  120.    public Object getVariable(QName var1) throws SAXException {
  121.       int var2 = this.getCurrentStackFrameIndex();
  122.  
  123.       for(int var3 = var2 - 1; var3 >= 0; --var3) {
  124.          Object var4 = ((Vector)this).elementAt(var3);
  125.          if (var4 == contextMarker) {
  126.             break;
  127.          }
  128.  
  129.          if (((Arg)var4).equals(var1)) {
  130.             return ((Arg)var4).m_val;
  131.          }
  132.       }
  133.  
  134.       for(int var6 = this.m_globalStackFrameIndex - 1; var6 >= 2; --var6) {
  135.          Object var5 = ((Vector)this).elementAt(var6);
  136.          if (var5 == contextMarker) {
  137.             break;
  138.          }
  139.  
  140.          if (((Arg)var5).equals(var1)) {
  141.             return ((Arg)var5).m_val;
  142.          }
  143.       }
  144.  
  145.       return null;
  146.    }
  147.  
  148.    public void pushElemFrame(ElemTemplateElement var1) {
  149.       this.push(m_elemFrameBoundry);
  150.    }
  151.  
  152.    void popElemFrame(ElemTemplateElement var1) {
  153.       int var2 = ((Vector)this).size();
  154.  
  155.       for(int var3 = var2 - 1; var3 >= 0; --var3) {
  156.          Object var4 = ((Vector)this).elementAt(var3);
  157.          if (var4 == contextMarker) {
  158.             return;
  159.          }
  160.  
  161.          if (var4 == m_elemFrameBoundry) {
  162.             this.setStackSize(var3);
  163.             return;
  164.          }
  165.       }
  166.  
  167.    }
  168. }
  169.